<?php
require_once 'IModelo.php';
class Ticket implements IModelo
{
    private $_id = 0;
    private $_titulo = "";
    private $_descripcion = "";
    private $_prioridad = null;
    private $_estado = null;
    private $_departamento = null;
    private $_solicitante = null;
    private $_encargado = null;
    private $_fecha_abierto = "";
    private $_fecha_cerrado = "";

    public function  __construct($titulo=null,$descripcion=null,$prioridad=null,$departamento=null,$solicitante=null)
    {
        if ($titulo!=null && $descripcion!=null 
            && $prioridad!=null && $departamento!=null)
        {
            $this->setTitulo($titulo);
            $this->setDescripcion($descripcion);
            $this->setPrioridad($prioridad);
            $this->setDepartamento($departamento);
            $this->setSolicitante($solicitante);
        }
    }

    public function actualizar(){

    }

    public function eliminar(){

    }

    public function registrar()
    {
        $con = new Core_Db_Adapter_Mysql(Config::getDbConfig());
        $con->setTable('tickets');
        $cols = array(  'titulo',
                        'descripcion',
                        'prioridad',
                        'estado',
                        'departamento',
                        'id_creador',
                        'fecha_abierto');
                   
        $vals = array($this->_titulo,
                        $this->_descripcion,
                        $this->_prioridad,
                        1,
                        $this->_departamento,
                        $this->_solicitante,
                        date('Y-m-d H:i:s'));
        try
        {
            $con->insert($cols, $vals);
        }catch(Exception $ex){
            echo 'Error al insertar Ticket en BD.';
            exit();
        }
    }

    public function buscar($id)
    {
        $con = new Core_Db_Adapter_Mysql(Config::getDbConfig());
        $con->setTable('tickets');
        $con->setWhere(array('id_ticket'), array($id));
        try
        {
            $select = $con->select();
            $this->_id = $select[0]->id;
            $this->_titulo = $select[0]->titulo;
            $this->_descripcion = $select[0]->descripcion;
            $this->_prioridad = $select[0]->prioridad;
            $this->_estado = $select[0]->estado;
            $this->_departamento = $select[0]->departamento;
            $this->_encargado = $select[0]->id_encargado;
            $this->_solicitante = $select[0]->id_creador;
            $this->_fecha_abierto = $select[0]->fecha_abierto;
            $this->_fecha_cerrado = $select[0]->fecha_cerrado;
        }catch(Exception $ex){
            echo 'El ticket buscado no existe.';
            exit();
        }
    }

    public function buscarPorUsuario($id,$estado="abierto")
    {
        $con = new Core_Db_Adapter_Mysql(Config::getDbConfig());
        $con->setTable('tickets');
        $tickets = array();
        try
        {
            if (strtoupper($estado)=="CERRADO"){
                $con->setWhere(array('id_creador','estado'), array($id,4));
            }else if (strtoupper($estado)=="ABIERTO"){
                $con->setWhere(array('id_creador'), array($id));
                $con->setNotWhere(array("estado"), array(4));
            }
            $select = $con->select();
            foreach ($select as $s){
                $ticket = new Ticket();
                $ticket->setId($s->id_ticket);
                $ticket->setTitulo($s->titulo);
                $ticket->setDescripcion($s->descripcion);
                $ticket->setPrioridad($s->prioridad);
                $ticket->setEstado($s->estado);
                $ticket->setDepartamento($s->departamento);
                $ticket->setEncargado($s->id_encargado);
                $ticket->setSolicitante($s->id_creador);
                $ticket->setFecha_abierto($s->fecha_abierto);
                $ticket->setFecha_cerrado($s->fecha_cerrado);
                array_push($tickets, $ticket);
            }
        }catch(Exception $ex){
            echo 'El ticket buscado no existe.';
            exit();
        }
        return $tickets;
    }

    public function getMensajes($idTicket)
    {
        $con = new Core_Db_Adapter_Mysql(Config::getDbConfig());
        $con->setTable('v_ticket_mensajes');
        $mensajes = array();
        $con->setWhere("id_ticket", $idTicket);
        try
        {
            $select = $con->select();
            foreach ($select as $s){
                    require_once 'Mensaje.php';
                    $mensaje = new Mensaje();
                    $mensaje->set_id($s->id_mensaje);
                    $mensaje->set_escritor($s->nombre." ".$s->apellido);
                    $mensaje->set_titulo($s->titulo);
                    $mensaje->set_mensaje($s->mensaje);
                    $mensaje->set_fecha($s->fecha_escrito);
                    array_push($mensajes, $mensaje);
                }
        }catch(Exception $e)
        {
            
        }
        return $mensajes;
    }

    public function getId()
    {
        return $this->_id;
    }

    public function setId($id)
    {
        $this->_id = $id;
    }

    public function getTitulo()
    {
        return $this->_titulo;
    }

    public function setTitulo($titulo)
    {
        $this->_titulo = $titulo;
    }

    public function getDescripcion()
    {
        return $this->_descripcion;
    }

    public function setDescripcion($descripcion)
    {
        $this->_descripcion = $descripcion;
    }

    public function getPrioridad()
    {
        require_once 'Prioridad.php';
        $descripcion = new Prioridad();
        $descripcion->buscar($this->_prioridad);
        return $descripcion->getDescripcion();
    }

    public function setPrioridad($prioridad)
    {
        $this->_prioridad = $prioridad;
    }

    public function getEstado()
    {
        require_once 'Estado.php';
        $descripcion = new Estado();
        $descripcion->buscar($this->_estado);
        return $descripcion->getDescripcion();
    }

    public function setEstado($estado)
    {
        $this->_estado = $estado;
    }

    public function getDepartamento()
    {
        require_once 'Departamento.php';
        $descripcion = new Departamento();
        $descripcion->buscar($this->_departamento);
        return $descripcion->getDescripcion();
    }

    public function setDepartamento($departamento)
    {
        $this->_departamento = $departamento;
    }

    public function getSolicitante()
    {
        require_once 'Usuario.php';
        $solicitante = new Usuario();
        $solicitante->buscar($this->_solicitante);
        return $solicitante;
    }

    public function setSolicitante($solicitante)
    {
        $this->_solicitante = $solicitante;
    }

    public function setEncargado($encargado)
    {
        $this->_encargado = $encargado;
    }
    
    public function getEncargado()
    {
        if ($this->_encargado!=null){
            require_once 'Usuario.php';
            $encargado = new Usuario();
            $encargado->buscar($this->_encargado);
            return $encargado;
        }
    }

    public function getFecha_abierto()
    {
        return $this->_fecha_abierto;
    }

    public function setFecha_abierto($fecha_abierto)
    {
        $this->_fecha_abierto = $fecha_abierto;
    }

    public function getFecha_cerrado()
    {
        return $this->_fecha_cerrado;
    }

    public function setFecha_cerrado($fecha_cerrado)
    {
        $this->_fecha_cerrado = $fecha_cerrado;
    }
}
